/*************************************************************************
	> File Name: init.c
	> Author: 
	> Mail: 
	> Created Time: 2018年08月27日 星期一 12时50分13秒
 ************************************************************************/

#include <init_socket.h>

/*
 * 函数名:socket_init
 * 功能:socket初始化函数,创建socket,绑定端口号和IP地址,创建监听队列
 * 参数:void *s,保留
 * 返回值:成功返回socketID,失败返回ERR
 */
int socket_init(int port)
{
	int socketID = 0;
    int addrLength = 0;
    int on = 1;
    int ret = 0;
    struct sockaddr_in addr;
    
    //创建套接字    
    socketID = socket(AF_INET, SOCK_STREAM, 0);
    if (socketID < 0)
    {
        perror("socket error");
        return -1;
    }
    
    setsockopt(socketID, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    
    //绑定自己的地址
    addrLength = sizeof(addr);
    memset(&addr, 0, addrLength);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = INADDR_ANY;
    ret = bind(socketID, (struct sockaddr *)&addr, addrLength);
    if (ret < 0)
    {
        perror("bind error");
        close(socketID);
        return -1;
    }
    
    //监听 
    listen(socketID, 5);
    return socketID;
}
